/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion.models;

import dtos.DTOServicio;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Sebastian
 */
public class TableModelServicio extends AbstractTableModel {

    private List<DTOServicio> dtos;
    private static final long serialVersionUID = 1L;
    private static final String[] NOMBRE_COLUMNAS = {"", "Nombre", "Descripción", "Duración", "Precio"};
    private static final boolean[] COLUMNAS_EDITABLES = {true, false, false, false, false};
    private static final Class[] CLASE_COLUMNAS = {Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Double.class};

    public TableModelServicio() {
        this.dtos = new ArrayList<DTOServicio>(0);
    }

    @Override
    public String getColumnName(int columna) {
        return NOMBRE_COLUMNAS[columna];
    }

    @Override
    public Class<?> getColumnClass(int columna) {
        return CLASE_COLUMNAS[columna];
    }

    @Override
    public boolean isCellEditable(int fila, int columna) {
        return COLUMNAS_EDITABLES[columna];
    }

    @Override
    public int getRowCount() {
        return dtos != null ? dtos.size() : 0;
    }

    @Override
    public int getColumnCount() {
        return NOMBRE_COLUMNAS.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        DTOServicio fila = dtos.get(rowIndex);
        Object resultado = null;
        switch (columnIndex) {
            case 0:
                resultado = fila.isSeleccionado();
                break;
            case 1:
                resultado = fila.getNombreServicio();
                break;
            case 2:
                resultado = fila.getDescripcionServicio();
                break;
            case 3:
                resultado = fila.getDuracion();
                break;
            case 4:
                resultado = fila.getPrecio();
                break;
            default:
                throw new AssertionError();
        }
        return resultado;
    }

    @Override
    public void setValueAt(Object aValue, int row, int column) {
        switch (column) {
            case 0:
                dtos.get(row).setSeleccionado((Boolean) aValue);
                break;
            default:
                throw new AssertionError();
        }

    }

    public void addRow(DTOServicio dTOServicio) {
        dtos.add(dTOServicio);
        fireTableDataChanged();
    }

    public void removeRow(DTOServicio dTOServicio) {
        dtos.remove(dTOServicio);
        fireTableDataChanged();
    }

    public void clear() {
        dtos.clear();
    }

    public List<DTOServicio> getRows() {
        return dtos;
    }

    public void setRows(List<DTOServicio> dtosServicios) {
        for (DTOServicio dTOProducto : dtosServicios) {
            dTOProducto.setSeleccionado(false);
        }


        dtos = dtosServicios;
        fireTableDataChanged();
    }

    public DTOServicio getRow(int nroFila) {
        return dtos.get(nroFila);
    }

    public List<DTOServicio> getSelectedRows() {
        List<DTOServicio> seleccionadas;
        seleccionadas = new ArrayList<DTOServicio>();
        if (dtos != null && !dtos.isEmpty()) {
            for (DTOServicio dTOServicio : dtos) {
                if (dTOServicio.isSeleccionado()) {
                    seleccionadas.add(dTOServicio);
                }
            }
        }
        return seleccionadas;
    }

    public void removeSelectedRows() {
        List<DTOServicio> seleccionadas = getSelectedRows();
        for (DTOServicio dTOServicio : seleccionadas) {
            dtos.remove(dTOServicio);
        }
        fireTableDataChanged();
    }
}
